home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / magazine / lantimes / 90_02 / put.c < prev    next >
Text File  |  1989-12-11  |  3KB  |  103 lines

  1. /*-------------------------------------------------------------------------*
  2.  * put.c -- send a file to a remote node
  3.  *
  4.  * Usage:  put filename.ext \\nodeid
  5.  *
  6.  * The remote node must run 'get' to complete the transfer.
  7.  * filename.ext and \\nodeid are command line arguments.
  8.  *
  9.  * Compiler: Microsoft C Version 5.0.
  10.  *
  11.  * Tom Nolan 7/12/89
  12.  *
  13.  *-------------------------------------------------------------------------*/
  14.  
  15. #include <stdio.h>
  16. #include <io.h>
  17. #include "netbios.h"
  18.  
  19. void nsend(char *fname, char *node);
  20. void usage(void);
  21.  
  22. typedef struct                            /* network information block definition    */
  23. {
  24.     char fname[MAXPATH];                /* file name for transmission                    */
  25.     long fsize;                            /* size of file in bytes                        */
  26.     char sender[NODE_NAME_LEN];    /* name of sending node                            */
  27.     char receiver[NODE_NAME_LEN];    /* name of receiving node                        */
  28. }
  29. NETINFO;
  30.  
  31. char buf[4096];                        /* buffer for send/receive data                */
  32.  
  33. #define diag printf                    /* remove "printf" to turn off diags        */
  34.  
  35. /*-------------------------------------------------------------------------*/
  36. main(int argc, char **argv)
  37. {
  38.     if(argc != 3)
  39.         usage();                                                /* too many cmd line args    */
  40.  
  41.     if(!isnodename(argv[1]) && isnodename(argv[2]))    /* 2nd arg is nodename?    */
  42.         nsend(argv[1], argv[2]);                        /* so send to that node     */
  43.     else
  44.         usage();
  45.     exit(0);
  46. }
  47.  
  48. /*-------------------------------------------------------------------------*/
  49. void nsend(char *fname, char *node)                /* network send                    */
  50. {
  51.     NETINFO netinfo;                                    /* network information block    */
  52.     int lsn;                                                /* logical session number        */
  53.     FILE *fp;                                            /* file stream pointer            */
  54.     int len;                                                /* len of data read from file    */
  55.     NCB ncb;                                                /* network command block        */
  56.  
  57.     fp = fopen(fname, "rb");                        /* attempt to open file            */
  58.     if(!fp)
  59.     {
  60.         printf("File %s does not exist\n", fname);
  61.         exit(1);
  62.     }
  63.  
  64.     strcpy(netinfo.fname, fname);                            /* copy name of file        */
  65.     netinfo.fsize = filelength(fileno(fp));            /* ..size of file            */
  66.     strncpy(netinfo.receiver, node, NODE_NAME_LEN);    /* ..and intended rcvr    */
  67.  
  68.     diag("Posting receive\n");
  69.     clear_ncb(&ncb);                                        /* issue receive datagram    */
  70.     nw_recv_datagram(&netinfo, sizeof(netinfo), &ncb);
  71.     diag("Sending datagram\n");
  72.     while(ncb.cmdcplt == 0xff)                            /* send our request until    */
  73.         send_datagram(node, &netinfo, sizeof(netinfo)); /* an answer comes    */
  74.  
  75.     while((lsn = call(netinfo.receiver, netinfo.sender)) == 0)
  76.         ;                                                        /* call receiving node        */
  77.  
  78.     diag("Communicating on LSN %d\n", lsn);
  79.  
  80.     printf("Packets:");
  81.     while(netinfo.fsize > 0)                        /* send the whole file            */
  82.     {
  83.         diag(".");
  84.         len = fread(buf, 1, sizeof(buf), fp);    /* a buffer at a time            */
  85.         send(lsn, buf, len);
  86.         netinfo.fsize -= len;
  87.     }
  88.  
  89.     receive(lsn, 0, 0);                                /* make sure our session is    */
  90.     fclose(fp);                                            /* closed correctly                */
  91.     printf("\nSent file %s\n", fname);
  92. }
  93.  
  94. /*-------------------------------------------------------------------------*/
  95. void usage(void)
  96. {
  97.     printf( "Put v1.00 T. Nolan - 7/12/89\n"
  98.         "usage:\n\n"
  99.         "put filename.ext \\nodeid  -  send filename.ext to nodeid\n"
  100.         "Run put and get on both nodes to transfer a file.\n");
  101.     exit(1);
  102. }
  103.